package com.moduleapp.base;

import android.app.Activity;
import android.app.Application;
import android.content.Context;

import com.alibaba.android.arouter.BuildConfig;
import com.alibaba.android.arouter.launcher.ARouter;
import com.common.config.OkHttpConfig;
import com.common.db.DatabaseManager;
import com.common.service.IUserService;
import com.common.utils.CrashHandler;
import com.fragment4.service.UserServiceImpl;

/**
 * 说明
 * // 在Activity/Fragment中使用：
 * BaseApplication app = BaseApplication.getInstance();
 *
 * // 检查数据库状态
 * if (app.isDatabaseAvailable()) {
 *     SQLiteDatabase db = app.getDatabase();
 *     // 使用数据库
 * } else {
 *     // 处理数据库不可用情况
 *     BaseApplication.DatabaseInitStatus status = app.getDatabaseStatus();
 *     // 根据状态给用户提示
 * }
 */
public class BaseApplication extends Application {
    private static BaseApplication instance;


    private Activity currentActivity;

    @Override
    public void onCreate() {
        super.onCreate();

        // 初始化全局异常处理
        CrashHandler.getInstance().init(this);

        instance = this;
        initARouter();

        // 初始化数据库管理器
        DatabaseManager.getInstance(this);

        initARouter();
        OkHttpConfig.initOkHttp();

        // 初始化用户服务
        initUserService();

    }
    private void initUserService() {
        IUserService userService = ARouter.getInstance().navigation(IUserService.class);
        if (userService instanceof UserServiceImpl) {
            ((UserServiceImpl) userService).init(this);
        }
    }

    private void initARouter() {
        if (BuildConfig.DEBUG) {
            ARouter.openLog();
            ARouter.openDebug();
        }
        ARouter.init(this);
    }

    public static BaseApplication getInstance() {
        return instance;
    }

    // 直接提供全局 Application Context
    public static Context getContext() {
        return instance.getApplicationContext();
    }


    /**
     * 用户手动关闭应用程序，或者系统因为某些原因（如内存不足、应用程序出现严重错误等）决定终止应用程序时，应用程序的 onTerminate 方法会被调用
     */
    @Override
    public void onTerminate() {
        super.onTerminate();
        // 应用终止时关闭数据库
        DatabaseManager.getInstance(this).closeDatabase();
    }

}
